#ifndef F2FB_CONVERTER_H
#define F2FB_CONVERTER_H

#include "common/elements/edge.h"
#include "common/elements/field_type.h"
#include "common/elements/item.h"
#include "common/elements/item_field.h"
#include "common/elements/item_history.h"
#include "common/elements/item_type.h"
#include "common/elements/item_user_state.h"
#include "common/elements/phase.h"
#include "common/elements/project.h"
#include "common/elements/state.h"
#include "common/elements/user.h"
#include "common/elements/workflow.h"

#include "entities/entity.h"

namespace F2FB
{

struct Converter final
{
    static Elements::Workflows workflows(
        std::vector<std::shared_ptr<F2FB::Database::Entity>> entities
    );

    static Elements::States states(
        std::vector<std::shared_ptr<F2FB::Database::Entity>> entities
    );

    static Elements::Edges edges(
        std::vector<std::shared_ptr<F2FB::Database::Entity>> entities
    );

    static Elements::ItemTypes itemTypes(
        std::vector<std::shared_ptr<F2FB::Database::Entity>> entities
    );

    static Elements::FieldTypes fieldTypes(
        std::vector<std::shared_ptr<F2FB::Database::Entity>> entities
    );

    static Elements::Users users(
        std::vector<std::shared_ptr<F2FB::Database::Entity>> entities
    );

    static Elements::Projects projects(
        std::vector<std::shared_ptr<F2FB::Database::Entity>> entities
    );

    static Elements::Phases phases(
        std::vector<std::shared_ptr<F2FB::Database::Entity>> entities
    );

    static Elements::Items items(
        std::vector<std::shared_ptr<F2FB::Database::Entity>> entities
    );

    static Elements::ItemHistories itemHistories(
        std::vector<std::shared_ptr<F2FB::Database::Entity>> entities
    );

    static Elements::ItemUserStates itemUserStates(
        std::vector<std::shared_ptr<F2FB::Database::Entity>> entities
    );

    static Elements::ItemFields itemFields(
        std::vector<std::shared_ptr<F2FB::Database::Entity>> entities
    );
};

} // namespace F2FB

#endif // F2FB_CONVERTER_H
